package br.com.ozsolucoes.sessionbeans;

import java.io.Serializable;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import br.com.ozsolucoes.entity.Categoria;
import br.com.ozsolucoes.entity.ServicoCategoria;

@Stateless
public class CategoriaSessionBean implements Serializable {

	private static final long serialVersionUID = 6659865562384657035L;

	@PersistenceContext
	private EntityManager entityManager;

	public void adicionarCategoria(Categoria categoria) {
		categoria.setId(0);
		entityManager.persist(categoria);
	}

	public void alterarCategoria(Categoria categoria) {
		entityManager.merge(categoria);
	}

	public void excluirCategoria(Categoria categoria) {
		categoria = entityManager.find(Categoria.class, categoria.getId());
		entityManager.remove(categoria);
	}

	@SuppressWarnings("unchecked")
	public List<Categoria> consultarTodasCategorias() {
		Query query = entityManager.createNamedQuery("Categoria.consultarTodas");
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}

	public Categoria consultarPorId(long idCategoria) {
		Query query = entityManager.createNamedQuery("Categoria.consultarPorId");
		query.setParameter("idCategoria", idCategoria);
		try {
			return (Categoria) query.getSingleResult();
		} catch (NoResultException e) {
			return null;
		}
	}

	public Categoria consultarPorCategoria(String categoria) {
		Query query = entityManager.createNamedQuery("Categoria.consultarPorCategoria");
		query.setParameter("categoria", categoria);
		try {
			return (Categoria) query.getSingleResult();
		} catch (NoResultException e) {
			return null;
		}
	}

	@SuppressWarnings("unchecked")
	public List<Categoria> consultarCategoriasVingente(long idServico) {
		Query query = entityManager.createNamedQuery("Categoria.consultarCategoriasVingentes");
		query.setParameter("idServico", idServico);
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}

	@SuppressWarnings("unchecked")
	public List<String> consultarCategoriasVingenteString(long idServico) {
		Query query = entityManager.createNamedQuery("Categoria.consultarCategoriasVingentesString");
		query.setParameter("idServico", idServico);
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}

	@SuppressWarnings("unchecked")
	public List<Categoria> consultarCategoriasTicketCliente(long idCliente) {
		Query query = entityManager.createNamedQuery("Categoria.consultarCategoriasTicketCliente");
		query.setParameter("idCliente", idCliente);
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}

	@SuppressWarnings("unchecked")
	public List<String> consultarCategoriasAutoComplete(String categoria) {
		Query query = entityManager.createNamedQuery("Categoria.consultarPorCategoriaAutoComplete");
		query.setParameter("categoria", "%" + categoria + "%");
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}
	@SuppressWarnings("unchecked")
	public List<ServicoCategoria> consultarServicoCategoriasVingentes(long idServico) {
		Query query = entityManager.createNamedQuery("Categoria.consultarServicoCategoriasVingentes");
		query.setParameter("idServico", idServico);
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}
}
